<?php
declare(strict_types=1);

namespace mexti;

class Face {
    /**
     * 当前照片人脸总数
     */
    public readonly int $num;
    /**
     * 照片宽度
     */
    public readonly int $width;

    /**
     * 照片高度
     */
    public readonly int $height;

    /**
     * @param string $imageData 图片数据
     * @param int $maxFace 最大人脸数 不允许超过100
     */
    public function __construct(string $imageData, int $maxFace = 100)
    {
        
    }

    /**
     * 获取质量最好的人脸索引
     * @return int
     */
    public function best() : int
    {
        return 0;
    }


    /**
     * 获取人脸质量
     * @param int $index 人脸索引
     * @return int 返回人脸质量, 建议人脸质量大于 65 用于比对, 大于 90 用于注册
     */
    public function quality(int $index) : int
    {
        return 0;
    }

    /**
     * 活体检测, 需要配合特定的摄像头才能完成,
     * @param int $index 人脸索引
     * @return int 人脸活体置信度
     */
    public function liveness(int $index) : int
    {
        return 0;
    }

    /**
     * 获取人脸特征
     * @param int $index 人脸索引
     * @return string 人脸特征
     */
    public function feature(int $index) : string
    {
        return '';
    }


    /**
     * 人脸比对
     * @param string $featureA 人脸特征A
     * @param string $featureB 人脸特征B
     * @return int 人脸相似度 > 0.76 为同一个人
     */
    public static function compare(string $featureA, string $featureB) : float {
        return 0;
    }

    /**
     * 解码数据(旧平台针对用户照片做加密存储的, 需要解码后才能使用.)
     */
    public static function decode(string $encodedData) : ?string {
        return '';
    }

    /**
     * 引擎初始化, 如果不初始化, 会在第一次使用时自动初始化. 如果已经初始化过, 则会重新初始化, 如果初始化失败, 会抛出 mexti\FaceException 异常.
     * @param string $licenseFile 授权文件路径, 如果不传, 则使用php.ini中的配置
     * @param int $iMaxSearchNum 最大搜索库容, 如果不传, 则使用php.ini中的配置
     */
    public static function init(string $licenseFile = null, int $iMaxSearchNum = null) : void {

    }
}